#include "Camara.h"

Camara::Camara(unsigned int alto, unsigned int ancho, float fov) : 
	m_alto(alto), m_ancho(ancho), m_fov(fov) 
{
	actualizarMatrizProyeccion();
}

Camara::~Camara(){ }


void Camara::init(const glm::vec3 &posicion, const glm::vec3 &target, const glm::vec3 &up) {
	this->m_vecPosicion = posicion;
	this->m_vecTarget = target;
	this->m_vecUp = up;

	actualizarMatrizVista();
}


const glm::mat4 Camara::getViewMatrix() const {
	return this->m_matVista;
}


const glm::mat4 Camara::getProjectMatrix() const {
	return this->m_matProyeccion;
}


void Camara::actualizarMatrizVista() {
	this->m_matVista = glm::lookAt(this->m_vecPosicion, this->m_vecTarget, this->m_vecUp);
}


void Camara::actualizarMatrizProyeccion() {
	float aspectRatio = static_cast<float>(this->m_ancho) / static_cast<float>(this->m_alto);
	this->m_matProyeccion = glm::perspective( this->m_fov, aspectRatio, 0.1f, 200.0f );	/*
	this->m_matProyeccion = glm::ortho(-20.0f, 25.0f, -11.25f, 22.5f, 0.0f, 100.0f);	// Para la generacion del shadow map */
}

